home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / text / BoxView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  9.3 KB  |  561 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Graphics;
  6. import java.awt.Rectangle;
  7. import java.awt.Shape;
  8. import javax.swing.SizeRequirements;
  9. import javax.swing.event.DocumentEvent;
  10. import javax.swing.text.Position.Bias;
  11.  
  12. public class BoxView extends CompositeView {
  13.    int axis;
  14.    int width;
  15.    int height;
  16.    boolean xValid;
  17.    boolean yValid;
  18.    SizeRequirements xRequest;
  19.    SizeRequirements yRequest;
  20.    boolean xAllocValid;
  21.    int[] xOffsets;
  22.    int[] xSpans;
  23.    boolean yAllocValid;
  24.    int[] yOffsets;
  25.    int[] ySpans;
  26.  
  27.    public BoxView(Element var1, int var2) {
  28.       super(var1);
  29.       this.axis = var2;
  30.       this.xOffsets = new int[0];
  31.       this.xSpans = new int[0];
  32.       this.xValid = false;
  33.       this.xAllocValid = false;
  34.       this.yOffsets = new int[0];
  35.       this.ySpans = new int[0];
  36.       this.yValid = false;
  37.       this.yAllocValid = false;
  38.    }
  39.  
  40.    protected void baselineLayout(int var1, int var2, int[] var3, int[] var4) {
  41.       int var5 = (int)((float)var1 * this.getAlignment(var2));
  42.       int var6 = var1 - var5;
  43.       int var7 = ((CompositeView)this).getViewCount();
  44.  
  45.       for(int var8 = 0; var8 < var7; ++var8) {
  46.          View var9 = ((CompositeView)this).getView(var8);
  47.          float var10 = var9.getAlignment(var2);
  48.          int var11 = (int)var9.getPreferredSpan(var2);
  49.          int var12 = (int)((float)var11 * var10);
  50.          int var13 = var11 - var12;
  51.          if (var11 > var1) {
  52.             if ((int)var9.getMinimumSpan(var2) < var11) {
  53.                var12 = var5;
  54.                var13 = var6;
  55.             } else if (var9.getResizeWeight(var2) > 0 && var9.getMaximumSpan(var2) != (float)var11) {
  56.                throw new Error("should not happen: " + var9.getClass());
  57.             }
  58.          } else if (var11 < var1 && (int)var9.getMaximumSpan(var2) > var11) {
  59.             var12 = var5;
  60.             var13 = var6;
  61.          }
  62.  
  63.          var3[var8] = var5 - var12;
  64.          var4[var8] = var12 + var13;
  65.       }
  66.  
  67.    }
  68.  
  69.    protected SizeRequirements baselineRequirements(int var1, SizeRequirements var2) {
  70.       int var3 = 0;
  71.       int var4 = 0;
  72.       int var5 = 0;
  73.       int var6 = ((CompositeView)this).getViewCount();
  74.  
  75.       for(int var7 = 0; var7 < var6; ++var7) {
  76.          View var8 = ((CompositeView)this).getView(var7);
  77.          int var9 = (int)var8.getPreferredSpan(var1);
  78.          int var10 = (int)(var8.getAlignment(var1) * (float)var9);
  79.          int var11 = var9 - var10;
  80.          var3 = Math.max(var11, var3);
  81.          var4 = Math.max(var10, var4);
  82.          var5 += var8.getResizeWeight(var1);
  83.       }
  84.  
  85.       if (var2 == null) {
  86.          var2 = new SizeRequirements();
  87.       }
  88.  
  89.       var2.preferred = var3 + var4;
  90.       if (var5 != 0) {
  91.          var2.maximum = Integer.MAX_VALUE;
  92.          var2.minimum = 0;
  93.       } else {
  94.          var2.maximum = var2.preferred;
  95.          var2.minimum = var2.preferred;
  96.       }
  97.  
  98.       if (var2.preferred > 0) {
  99.          var2.alignment = (float)var4 / (float)var2.preferred;
  100.       } else {
  101.          var2.alignment = 0.5F;
  102.       }
  103.  
  104.       return var2;
  105.    }
  106.  
  107.    protected SizeRequirements calculateMajorAxisRequirements(int var1, SizeRequirements var2) {
  108.       float var3 = 0.0F;
  109.       float var4 = 0.0F;
  110.       float var5 = 0.0F;
  111.       int var6 = ((CompositeView)this).getViewCount();
  112.  
  113.       for(int var7 = 0; var7 < var6; ++var7) {
  114.          View var8 = ((CompositeView)this).getView(var7);
  115.          var3 += var8.getMinimumSpan(var1);
  116.          var4 += var8.getPreferredSpan(var1);
  117.          var5 += var8.getMaximumSpan(var1);
  118.       }
  119.  
  120.       if (var2 == null) {
  121.          var2 = new SizeRequirements();
  122.       }
  123.  
  124.       var2.alignment = 0.5F;
  125.       var2.minimum = (int)var3;
  126.       var2.preferred = (int)var4;
  127.       var2.maximum = (int)var5;
  128.       return var2;
  129.    }
  130.  
  131.    protected SizeRequirements calculateMinorAxisRequirements(int var1, SizeRequirements var2) {
  132.       int var3 = 0;
  133.       long var4 = 0L;
  134.       int var6 = Integer.MAX_VALUE;
  135.       int var7 = ((CompositeView)this).getViewCount();
  136.  
  137.       for(int var8 = 0; var8 < var7; ++var8) {
  138.          View var9 = ((CompositeView)this).getView(var8);
  139.          var3 = Math.max((int)var9.getMinimumSpan(var1), var3);
  140.          var4 = Math.max((long)((int)var9.getPreferredSpan(var1)), var4);
  141.          var6 = Math.max((int)var9.getMaximumSpan(var1), var6);
  142.       }
  143.  
  144.       if (var2 == null) {
  145.          var2 = new SizeRequirements();
  146.          var2.alignment = 0.5F;
  147.       }
  148.  
  149.       var2.preferred = (int)var4;
  150.       var2.minimum = var3;
  151.       var2.maximum = var6;
  152.       return var2;
  153.    }
  154.  
  155.    void checkRequests() {
  156.       if (this.axis == 0) {
  157.          if (!this.xValid) {
  158.             this.xRequest = this.calculateMajorAxisRequirements(0, this.xRequest);
  159.          }
  160.  
  161.          if (!this.yValid) {
  162.             this.yRequest = this.calculateMinorAxisRequirements(1, this.yRequest);
  163.          }
  164.       } else {
  165.          if (!this.xValid) {
  166.             this.xRequest = this.calculateMinorAxisRequirements(0, this.xRequest);
  167.          }
  168.  
  169.          if (!this.yValid) {
  170.             this.yRequest = this.calculateMajorAxisRequirements(1, this.yRequest);
  171.          }
  172.       }
  173.  
  174.       this.yValid = true;
  175.       this.xValid = true;
  176.    }
  177.  
  178.    protected void childAllocation(int var1, Rectangle var2) {
  179.       var2.x += this.xOffsets[var1];
  180.       var2.y += this.yOffsets[var1];
  181.       var2.width = this.xSpans[var1];
  182.       var2.height = this.ySpans[var1];
  183.    }
  184.  
  185.    protected boolean flipEastAndWestAtEnds(int var1, Position.Bias var2) {
  186.       if (this.axis == 1) {
  187.          int var3 = var2 == Bias.Backward ? Math.max(0, var1 - 1) : var1;
  188.          int var4 = ((CompositeView)this).getViewIndexAtPosition(var3);
  189.          if (var4 != -1) {
  190.             View var5 = ((CompositeView)this).getView(var4);
  191.             if (var5 != null && var5 instanceof CompositeView) {
  192.                return ((CompositeView)var5).flipEastAndWestAtEnds(var1, var2);
  193.             }
  194.          }
  195.       }
  196.  
  197.       return false;
  198.    }
  199.  
  200.    void forwardUpdate(DocumentEvent.ElementChange var1, DocumentEvent var2, Shape var3, ViewFactory var4) {
  201.       boolean var5 = this.isAllocationValid();
  202.       super.forwardUpdate(var1, var2, var3, var4);
  203.       if (var5 && !this.isAllocationValid()) {
  204.          Container var6 = ((View)this).getContainer();
  205.          if (var3 != null && var6 != null) {
  206.             int var7 = var2.getOffset();
  207.             int var8 = ((CompositeView)this).getViewIndexAtPosition(var7);
  208.             Rectangle var9 = ((CompositeView)this).getInsideAllocation(var3);
  209.             if (this.axis == 0) {
  210.                var9.x += this.xOffsets[var8];
  211.                var9.width -= this.xSpans[var8];
  212.             } else {
  213.                var9.y += this.yOffsets[var8];
  214.                var9.height -= this.ySpans[var8];
  215.             }
  216.  
  217.             ((Component)var6).repaint(var9.x, var9.y, var9.width, var9.height);
  218.          }
  219.       }
  220.  
  221.    }
  222.  
  223.    public float getAlignment(int var1) {
  224.       this.checkRequests();
  225.       switch (var1) {
  226.          case 0:
  227.             return this.xRequest.alignment;
  228.          case 1:
  229.             return this.yRequest.alignment;
  230.          default:
  231.             throw new IllegalArgumentException("Invalid axis: " + var1);
  232.       }
  233.    }
  234.  
  235.    int getAxis() {
  236.       return this.axis;
  237.    }
  238.  
  239.    public Shape getChildAllocation(int var1, Shape var2) {
  240.       if (var2 != null) {
  241.          Shape var3 = super.getChildAllocation(var1, var2);
  242.          if (var3 != null && !this.isAllocationValid()) {
  243.             Rectangle var4 = var3 instanceof Rectangle ? (Rectangle)var3 : var3.getBounds();
  244.             if (var4.width == 0 && var4.height == 0) {
  245.                return null;
  246.             }
  247.          }
  248.  
  249.          return var3;
  250.       } else {
  251.          return null;
  252.       }
  253.    }
  254.  
  255.    SizeRequirements[] getChildRequests(int var1) {
  256.       int var2 = ((CompositeView)this).getViewCount();
  257.       SizeRequirements[] var3 = new SizeRequirements[var2];
  258.  
  259.       for(int var4 = 0; var4 < var2; ++var4) {
  260.          View var5 = ((CompositeView)this).getView(var4);
  261.          int var6 = (int)var5.getMinimumSpan(var1);
  262.          int var7 = (int)var5.getPreferredSpan(var1);
  263.          int var8 = (int)var5.getMaximumSpan(var1);
  264.          float var9 = var5.getAlignment(var1);
  265.          var3[var4] = new SizeRequirements(var6, var7, var8, var9);
  266.       }
  267.  
  268.       return var3;
  269.    }
  270.  
  271.    public final int getHeight() {
  272.       return this.height;
  273.    }
  274.  
  275.    public float getMaximumSpan(int var1) {
  276.       this.checkRequests();
  277.       switch (var1) {
  278.          case 0:
  279.             return (float)this.xRequest.maximum + (float)((CompositeView)this).getLeftInset() + (float)((CompositeView)this).getRightInset();
  280.          case 1:
  281.             return (float)this.yRequest.maximum + (float)((CompositeView)this).getTopInset() + (float)((CompositeView)this).getBottomInset();
  282.          default:
  283.             throw new IllegalArgumentException("Invalid axis: " + var1);
  284.       }
  285.    }
  286.  
  287.    public float getMinimumSpan(int var1) {
  288.       this.checkRequests();
  289.       switch (var1) {
  290.          case 0:
  291.             return (float)this.xRequest.minimum + (float)((CompositeView)this).getLeftInset() + (float)((CompositeView)this).getRightInset();
  292.          case 1:
  293.             return (float)this.yRequest.minimum + (float)((CompositeView)this).getTopInset() + (float)((CompositeView)this).getBottomInset();
  294.          default:
  295.             throw new IllegalArgumentException("Invalid axis: " + var1);
  296.       }
  297.    }
  298.  
  299.    protected final int getOffset(int var1, int var2) {
  300.       int[] var3 = var1 == 0 ? this.xOffsets : this.yOffsets;
  301.       return var3[var2];
  302.    }
  303.  
  304.    public float getPreferredSpan(int var1) {
  305.       this.checkRequests();
  306.       switch (var1) {
  307.          case 0:
  308.             return (float)this.xRequest.preferred + (float)((CompositeView)this).getLeftInset() + (float)((CompositeView)this).getRightInset();
  309.          case 1:
  310.             return (float)this.yRequest.preferred + (float)((CompositeView)this).getTopInset() + (float)((CompositeView)this).getBottomInset();
  311.          default:
  312.             throw new IllegalArgumentException("Invalid axis: " + var1);
  313.       }
  314.    }
  315.  
  316.    public int getResizeWeight(int var1) {
  317.       this.checkRequests();
  318.       switch (var1) {
  319.          case 0:
  320.             if (this.xRequest.preferred != this.xRequest.minimum && this.xRequest.preferred != this.xRequest.maximum) {
  321.                return 1;
  322.             }
  323.  
  324.             return 0;
  325.          case 1:
  326.             if (this.yRequest.preferred != this.yRequest.minimum && this.yRequest.preferred != this.yRequest.maximum) {
  327.                return 1;
  328.             }
  329.  
  330.             return 0;
  331.          default:
  332.             throw new IllegalArgumentException("Invalid axis: " + var1);
  333.       }
  334.    }
  335.  
  336.    protected final int getSpan(int var1, int var2) {
  337.       int[] var3 = var1 == 0 ? this.xSpans : this.ySpans;
  338.       return var3[var2];
  339.    }
  340.  
  341.    protected View getViewAtPoint(int var1, int var2, Rectangle var3) {
  342.       int var4 = ((CompositeView)this).getViewCount();
  343.       if (this.axis == 0) {
  344.          if (var1 < var3.x + this.xOffsets[0]) {
  345.             this.childAllocation(0, var3);
  346.             return ((CompositeView)this).getView(0);
  347.          } else {
  348.             for(int var6 = 0; var6 < var4; ++var6) {
  349.                if (var1 < var3.x + this.xOffsets[var6]) {
  350.                   this.childAllocation(var6 - 1, var3);
  351.                   return ((CompositeView)this).getView(var6 - 1);
  352.                }
  353.             }
  354.  
  355.             this.childAllocation(var4 - 1, var3);
  356.             return ((CompositeView)this).getView(var4 - 1);
  357.          }
  358.       } else if (var2 < var3.y + this.yOffsets[0]) {
  359.          this.childAllocation(0, var3);
  360.          return ((CompositeView)this).getView(0);
  361.       } else {
  362.          for(int var5 = 0; var5 < var4; ++var5) {
  363.             if (var2 < var3.y + this.yOffsets[var5]) {
  364.                this.childAllocation(var5 - 1, var3);
  365.                return ((CompositeView)this).getView(var5 - 1);
  366.             }
  367.          }
  368.  
  369.          this.childAllocation(var4 - 1, var3);
  370.          return ((CompositeView)this).getView(var4 - 1);
  371.       }
  372.    }
  373.  
  374.    public final int getWidth() {
  375.       return this.width;
  376.    }
  377.  
  378.    protected boolean isAfter(int var1, int var2, Rectangle var3) {
  379.       if (this.axis == 0) {
  380.          return var1 > var3.width + var3.x;
  381.       } else {
  382.          return var2 > var3.height + var3.y;
  383.       }
  384.    }
  385.  
  386.    protected boolean isAllocationValid() {
  387.       return this.xAllocValid && this.yAllocValid;
  388.    }
  389.  
  390.    protected boolean isBefore(int var1, int var2, Rectangle var3) {
  391.       if (this.axis == 0) {
  392.          return var1 < var3.x;
  393.       } else {
  394.          return var2 < var3.y;
  395.       }
  396.    }
  397.  
  398.    protected void layout(int var1, int var2) {
  399.       this.checkRequests();
  400.       if (this.axis == 0) {
  401.          if (!this.xAllocValid) {
  402.             this.layoutMajorAxis(var1, 0, this.xOffsets, this.xSpans);
  403.          }
  404.  
  405.          if (!this.yAllocValid) {
  406.             this.layoutMinorAxis(var2, 1, this.yOffsets, this.ySpans);
  407.          }
  408.       } else {
  409.          if (!this.xAllocValid) {
  410.             this.layoutMinorAxis(var1, 0, this.xOffsets, this.xSpans);
  411.          }
  412.  
  413.          if (!this.yAllocValid) {
  414.             this.layoutMajorAxis(var2, 1, this.yOffsets, this.ySpans);
  415.          }
  416.       }
  417.  
  418.       this.xAllocValid = true;
  419.       this.yAllocValid = true;
  420.       int var3 = ((CompositeView)this).getViewCount();
  421.  
  422.       for(int var4 = 0; var4 < var3; ++var4) {
  423.          View var5 = ((CompositeView)this).getView(var4);
  424.          var5.setSize((float)this.xSpans[var4], (float)this.ySpans[var4]);
  425.       }
  426.  
  427.    }
  428.  
  429.    void layoutChanged(int var1) {
  430.       if (var1 == 0) {
  431.          this.xAllocValid = false;
  432.       } else {
  433.          this.yAllocValid = false;
  434.       }
  435.  
  436.    }
  437.  
  438.    protected void layoutMajorAxis(int var1, int var2, int[] var3, int[] var4) {
  439.       SizeRequirements.calculateTiledPositions(var1, (SizeRequirements)null, this.getChildRequests(var2), var3, var4);
  440.    }
  441.  
  442.    protected void layoutMinorAxis(int var1, int var2, int[] var3, int[] var4) {
  443.       int var5 = ((CompositeView)this).getViewCount();
  444.  
  445.       for(int var6 = 0; var6 < var5; ++var6) {
  446.          View var7 = ((CompositeView)this).getView(var6);
  447.          int var8 = (int)var7.getMinimumSpan(var2);
  448.          int var9 = (int)var7.getMaximumSpan(var2);
  449.          if (var9 < var1) {
  450.             float var10 = var7.getAlignment(var2);
  451.             var3[var6] = (int)((float)(var1 - var9) * var10);
  452.             var4[var6] = var9;
  453.          } else {
  454.             var3[var6] = 0;
  455.             var4[var6] = Math.max(var8, var1);
  456.          }
  457.       }
  458.  
  459.    }
  460.  
  461.    public Shape modelToView(int var1, Shape var2, Position.Bias var3) throws BadLocationException {
  462.       if (!this.isAllocationValid()) {
  463.          Rectangle var4 = var2.getBounds();
  464.          this.setSize((float)var4.width, (float)var4.height);
  465.       }
  466.  
  467.       return super.modelToView(var1, var2, var3);
  468.    }
  469.  
  470.    public void paint(Graphics var1, Shape var2) {
  471.       Rectangle var3 = var2.getBounds();
  472.       this.setSize((float)var3.width, (float)var3.height);
  473.       int var4 = ((CompositeView)this).getViewCount();
  474.       int var5 = var3.x + ((CompositeView)this).getLeftInset();
  475.       int var6 = var3.y + ((CompositeView)this).getTopInset();
  476.       Rectangle var7 = var1.getClipBounds();
  477.  
  478.       for(int var8 = 0; var8 < var4; ++var8) {
  479.          var3.x = var5 + this.xOffsets[var8];
  480.          var3.y = var6 + this.yOffsets[var8];
  481.          var3.width = this.xSpans[var8];
  482.          var3.height = this.ySpans[var8];
  483.          if (var3.intersects(var7)) {
  484.             this.paintChild(var1, var3, var8);
  485.          }
  486.       }
  487.  
  488.    }
  489.  
  490.    protected void paintChild(Graphics var1, Rectangle var2, int var3) {
  491.       View var4 = ((CompositeView)this).getView(var3);
  492.       var4.paint(var1, var2);
  493.    }
  494.  
  495.    public void preferenceChanged(View var1, boolean var2, boolean var3) {
  496.       if (var2) {
  497.          this.xValid = false;
  498.          this.xAllocValid = false;
  499.       }
  500.  
  501.       if (var3) {
  502.          this.yValid = false;
  503.          this.yAllocValid = false;
  504.       }
  505.  
  506.       super.preferenceChanged(var1, var2, var3);
  507.    }
  508.  
  509.    public void replace(int var1, int var2, View[] var3) {
  510.       super.replace(var1, var2, var3);
  511.       int var4 = var3.length;
  512.       this.xOffsets = this.updateLayoutArray(this.xOffsets, var1, var4);
  513.       this.xSpans = this.updateLayoutArray(this.xSpans, var1, var4);
  514.       this.xValid = false;
  515.       this.xAllocValid = false;
  516.       this.yOffsets = this.updateLayoutArray(this.xOffsets, var1, var4);
  517.       this.ySpans = this.updateLayoutArray(this.xSpans, var1, var4);
  518.       this.yValid = false;
  519.       this.yAllocValid = false;
  520.    }
  521.  
  522.    void setAxis(int var1) {
  523.       this.axis = var1;
  524.       this.preferenceChanged((View)null, true, true);
  525.    }
  526.  
  527.    public void setSize(float var1, float var2) {
  528.       if ((int)var1 != this.width) {
  529.          this.xAllocValid = false;
  530.       }
  531.  
  532.       if ((int)var2 != this.height) {
  533.          this.yAllocValid = false;
  534.       }
  535.  
  536.       if (!this.xAllocValid || !this.yAllocValid) {
  537.          this.width = (int)var1;
  538.          this.height = (int)var2;
  539.          this.layout(this.width - ((CompositeView)this).getLeftInset() - ((CompositeView)this).getRightInset(), this.height - ((CompositeView)this).getTopInset() - ((CompositeView)this).getBottomInset());
  540.       }
  541.  
  542.    }
  543.  
  544.    int[] updateLayoutArray(int[] var1, int var2, int var3) {
  545.       int var4 = ((CompositeView)this).getViewCount();
  546.       int[] var5 = new int[var4];
  547.       System.arraycopy(var1, 0, var5, 0, var2);
  548.       System.arraycopy(var1, var2, var5, var2 + var3, var4 - var3 - var2);
  549.       return var5;
  550.    }
  551.  
  552.    public int viewToModel(float var1, float var2, Shape var3, Position.Bias[] var4) {
  553.       if (!this.isAllocationValid()) {
  554.          Rectangle var5 = var3.getBounds();
  555.          this.setSize((float)var5.width, (float)var5.height);
  556.       }
  557.  
  558.       return super.viewToModel(var1, var2, var3, var4);
  559.    }
  560. }
  561.